<?php
class Workset_Ajax {
	/**
	 * Добавление команды на JavaScript, которая должна быть выполнена.
	 * 
	 * @param string $sJavaScript
	 */
	public static function addCommand($sJavaScript) {
		static $iCommandCount = 0;

		// Подготавливаем код скрипта и разбиваем его на необходимые нам куски.
		$sJavaScript = trim(preg_replace('~\s*\r?\n\s*~',"\n",$sJavaScript));
		$aPart = explode("\n",chunk_split($sJavaScript, 2000, "\n"));
		$aPart = array_filter($aPart,'strlen');

		// Обрабатываем массив кусков кода.
		for ($i = 0, $iLen = count($aPart); $i < $iLen; $i++) {
			$sPart = $aPart[$i];

			// Увеличиваем счётчик количества отправленных сообщений.
			header("X-Ajax-Cmd-Count: ".(++$iCommandCount),true);

			// Длинные сообщения необходимо отправлять кусками.
			header("X-Ajax-Cmd-$iCommandCount: "
				.( ($i == 0) ? strlen($sJavaScript) : '')
				."|$sPart|"
				.(($i < $iLen - 1) ? '' : dechex(crc32($sJavaScript))),
				true
			);

			// Проверяем выход за допустимые пределы.
			if ($iCommandCount > 99999) {
				throw new Exception('Maximum number of commands reached!');
			}
		}
	}
}
?>